#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int mod = 1e9 + 7;

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

ll qmi(ll a, ll b)
{
    ll res = 1;
    while (b)
    {
        if (b & 1)
            res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}
struct custom_hash
{
    static uint64_t splitmix64(uint64_t x)
    {
        x ^= x << 13;
        x ^= x >> 7;
        x ^= x << 17;
        return x;
    }
    size_t operator()(uint64_t x) const
    {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); // 时间戳
        return splitmix64(x + FIXED_RANDOM);
    }
};

void solve()
{
    int n, m;
    cin >> n >> m;
    vector<int> count(20);
    int x;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        count[log2(x)]++;
    }
    int sp = m, height = 1;
    for (int i = 0; i < n; i++)
    {
        int f = -1;
        for (int size = 19; size >= 0; size--)
        {
            if (count[size] && (1 << size) <= sp)
            {
                f = size;
                break;
            }
        }
        if (f == -1)
        {
            sp = m;
            height++;
            for (int size = 19; size >= 0; size--)
            {
                if (count[size] && (1 << size) <= sp)
                {
                    f = size;
                    break;
                }
            }
        }
        // cout << f << sp <<  endl;
        count[f]--;
        sp -= (1 << f);
    }
    cout << height << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}